#ifndef LIT__FORWARD__INCLUDED__HH__
#define LIT__FORWARD__INCLUDED__HH__

#include <LitExport.hpp>

#ifndef LIT_STANDALONE
#include "LitLightTypes.h"
#include "LitMovableTypes.h"
#endif
#include "LitExceptionTypes.h"
#include "LitCoreComponentTypes.h"
#include "LitCacheTypes.h"

#ifndef LIT_STANDALONE
	#include "LitPhysicsTypes.h"
#endif

#include <iosfwd>
#include <string>

namespace Lit
{
#ifndef LIT_STANDALONE
	class LIT_API	OgreDetails;
	class LIT_API	OgreManager;
	class LIT_API	Root;
#endif
	struct	LIT_API					FilePath;
	class	LIT_API					FileLineParser;
	class	LIT_API					FileSystem;
	class	LIT_API					MetaGroup;
	class	LIT_API					MetaObject;
	class	LIT_API					MetaData;
	class	LIT_API					String;
	
	class	LIT_API					Event;
	class	LIT_API					EventListener;

#ifndef LIT_STANDALONE
	class LIT_API SceneManager;
	class XmlSceneManager;
	class LIT_API InputManager;
	class LIT_API SystemStateManager;
	class LIT_API PhysicsManager;
	class LIT_API MeshDescriptionManager;
	class LIT_API InputSystem;
	
	extern String LIT_API trLightType( LightType t );
	extern String LIT_API trMovableType( MovableType t );
	extern String LIT_API trShapeType( Physics::ShapeType t );
	extern String LIT_API trPlatformOptimisation( Physics::PlatformOptimisation t );
	extern String LIT_API trSolverModel( Physics::SolverModel t );
#endif
	class LIT_API EventManager;
	class LIT_API CacheManager;
	
	enum AxisDirection
	{
		AXIS_X= 0,
		AXIS_Y= 1,
		AXIS_Z= 2,
		AXIS_CUSTOM= 3,
		AXIS_NONE= 4
	};

	enum PlaneAxis
	{
		PLANE_XZ= 0, // floor
		PLANE_YZ= 1, // left wall
		PLANE_XY= 2, // front wall
		PLANE_NONE= 3
	};

	extern String LIT_API trAxisDirection( AxisDirection t );
	extern String LIT_API trPlaneAxis( PlaneAxis t );

	extern String LIT_API trExceptionType( ExceptionType t );
	extern String LIT_API trComponentType( CoreComponentType t );
	extern String LIT_API trCacheLocation( CacheLocation t );
};

#endif